package com.cqupt.pojo;

import java.util.ArrayList;
import java.util.List;

// 此类与知识相关联、表示知识所属的类别

public class Type {
    private int typeId; // 类型id
    private String typeName; //类型名称
    private int typePId; // 此类型的父类型
    private int typeLevel; // 类型的级别
    private List<Type> children = new ArrayList<>(); // 类型的子类型

    public Type() {
    }

    /**
     * 类型的构造函数
     * @param typeId 类型的id
     * @param typeName 类型的名称
     * @param typePId 类型的父类型
     * @param typeLevel 类型的级别
     * @param children 是否具有子类型
     */
    public Type(int typeId, String typeName, int typePId, int typeLevel, List<Type> children) {
        this.typeId = typeId;
        this.typeName = typeName;
        this.typePId = typePId;
        this.typeLevel = typeLevel;
        this.children = children;
    }

    /**
     * 类型的构造函数（参数不同）
     * @param typeName 类型的名称
     * @param typePId 类型的父类型id
     * @param typeLevel 类型的级别
     */
    public Type(String typeName, int typePId, int typeLevel) {
        this.typeName = typeName;
        this.typePId = typePId;
        this.typeLevel = typeLevel;
    }

    /**
     * 类型的构造函数
     * @param typeId 类型的id
     * @param typeName 类型的名称
     */
    public Type(int typeId, String typeName) {
        this.typeId = typeId;
        this.typeName = typeName;
    }

    /**
     * 获取类型的id
     * @return 类型的id
     */
    public int getTypeId() {
        return typeId;
    }

    /**
     * 设置类型 id 值
     * @param typeId 新的类型 id
     */
    public void setTypeId(int typeId) {
        this.typeId = typeId;
    }

    /**
     * 获取类型的名称
     * @return 类型的名称
     */
    public String getTypeName() {
        return typeName;
    }

    /**
     * 设置类型 名称
     * @param typeName 新的类型 名称
     */
    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }

    /**
     * 获取类型的父类型id
     * @return 类型的父类型id
     */
    public int getTypePId() {
        return typePId;
    }

    /**
     * 设置类型 父类型id
     * @param typePId 新的类型 父类型id
     */
    public void setTypePId(int typePId) {
        this.typePId = typePId;
    }

    /**
     * 获取类型的级别
     * @return 类型的级别
     */
    public int getTypeLevel() {
        return typeLevel;
    }

    /**
     * 设置类型 级别
     * @param typeLevel 新的类型 级别
     */
    public void setTypeLevel(int typeLevel) {
        this.typeLevel = typeLevel;
    }

    /**
     * 获取类型的所有子类型
     * @return 类型的所有子类型
     */
    public List<Type> getChildren() {
        return children;
    }

    /**
     * 设置类型 子类型
     * @param children 新的类型 子类型
     */
    public void setChildren(List<Type> children) {
        this.children = children;
    }

    /**
     * 重写父类的方法，输出 Type 的字符串形式
     * @return
     */
    @Override
    public String toString() {
        return "Type{" +
                "typeId=" + typeId +
                ", typeName='" + typeName + '\'' +
                ", typePId=" + typePId +
                ", typeLevel=" + typeLevel +
                ", children=" + children +
                '}';
    }
}
